package generics;

import java.util.ArrayList;
import java.util.List;

public class TypeErasure {
    public static void main(String[] args) {
        List<String> strList = new ArrayList<>();
        List<Integer> intList = new ArrayList<>();

        // 类型擦除后，两者的运行时类型相同
        System.out.println(strList.getClass() == intList.getClass()); // true
        System.out.println(strList.getClass().getName()); // java.util.ArrayList

        // 编译时检查，运行时无泛型信息
        try {
            // 通过反射绕过编译检查（危险操作）
            java.lang.reflect.Method addMethod = List.class.getMethod("add", Object.class);
            addMethod.invoke(strList, 123); // 向List<String>添加Integer

            // 取出时会抛出ClassCastException
            String str = strList.get(0); // 运行时错误
        } catch (Exception e) {
            System.out.println("反射操作错误：" + e.getMessage());
        }
    }
}
